package com.example.myDesignPatterns.创建者模式.工厂模式.工厂方法模式;

import com.example.myDesignPatterns.创建者模式.工厂模式.bean.coffee.Coffee;
import com.example.myDesignPatterns.创建者模式.工厂模式.工厂方法模式.factory.CoffeeFactory;

/**
 * 咖啡店
 * 从以上的编写的代码可以看到，要增加产品类时也要相应地增加工厂类，不需要修改工厂类的代码了，
 * 这样就解决了简单工厂模式的缺点。
 * 工厂方法模式是简单工厂模式的进一步抽象。由于使用了多态性，工厂方法模式保持了简单工厂模式的
 * 优点，而且克服了它的缺点。
 */
public class CoffeeStore {
    private CoffeeFactory factory;

    public CoffeeStore(CoffeeFactory factory) {
        this.factory = factory;
    }

    public Coffee orderCoffee(String type) {
        Coffee coffee = factory.createCoffee();
        coffee.addMilk();
        coffee.addsugar();
        return coffee;
    }
    /**
     * 优点：
     * 用户只需要知道具体工厂的名称就可得到所要的产品，无须知道产品的具体创建过程；
     * 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类，无须对原工厂进行任何修改，
     * 满足开闭原则；
     * 缺点：
     * 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类，这增加了系统的复杂度。
     */
}
